home *** CD-ROM | disk | FTP | other *** search
/ Network Supervisor's Toolkit / Network Supervisor's Toolkit.iso / tools / lu62 / debug / sendfil.c < prev    next >
C/C++ Source or Header  |  1996-07-10  |  8KB  |  309 lines

  1. /*
  2.  *  CopyRight 1995. Nicholas Poljakov all rights reserved.
  3.  */
  4. #include <dos.h>
  5. #include <stdio.h>
  6. #include <string.h>
  7. #include <io.h>
  8. #include <fcntl.h>
  9. #include <stdlib.h>
  10. #include <state1.h>
  11.  
  12. #define BORDER 1
  13. #define REV_VID 0x70
  14. #define NORM_VID 0x1E
  15. #define MAX_FRAME 31
  16. #define BKSP 8
  17. #define F1 59
  18. #define F2 60
  19. #define F3 61
  20. #define F4 62
  21. #define F5 63
  22. #define F6 64
  23. #define F7 65
  24. #define F8 66
  25. #define F9 67
  26. #define F10 68
  27. #define HM  71   /* Home key     */
  28. #define UP  72   /* Up Arrow     */
  29. #define PU  73   /* Page Up      */
  30. #define LT  75   /* Left Arrow   */
  31. #define RT  77   /* Right Arrow  */
  32. #define END 79   /* End key      */
  33. #define DN  80   /* Down Arrow   */
  34. #define PD  81   /* Page Down    */
  35. #define ESC '\033'
  36. #define DIR 0x10
  37. #define BLKSIZ 1000  /* block size for send */
  38.  
  39. #define ROWS1 19
  40. #define ROWS2 23
  41. #define ROWS  25
  42. #define COLS 78
  43. #define L_W 20
  44. #define M_W 36
  45. #define R_W 20
  46. #define SCRNSIZE ((ROWS)*(COLS+2)*2)
  47. #define LAST (24 * 80)*2
  48.  
  49. #define M0C  4     /* Files maping col.s */
  50. #define M0L  14    /* Files maping rows  */
  51. #define M0F (((80 * 5) + 9)) * 2
  52. #define INTR 18*2
  53.  
  54. extern unsigned int attr1b;
  55. extern unsigned int *ptrs;
  56. extern int size;
  57. extern unsigned char row, col;
  58. extern int adapter;
  59. extern unsigned char far *videomem;
  60. extern int offset;
  61. extern int sw;
  62. extern char *path;
  63. extern char file[12];
  64. extern char tpname[31];
  65. extern char luname[8];
  66. extern char rcv_file[12];
  67. extern char dta[128];
  68.  
  69. extern char far *vid_mem;
  70. extern short cur_ln;
  71.  
  72. extern struct  part {            /* partner structure */
  73.           char     plu[8] ;         /* str plu_name        */
  74.                   int psl;                    /* str plu_s_limit     */
  75.           char     mode_name[8] ;         /* str mode_name        */
  76.                   int max_ru_size;            /* str ru_h_size       */
  77.                   int pacing;                 /* str =               */
  78.                   unsigned char lu_type;
  79.                }  pstr[4];
  80.  
  81. extern struct APL_PARM{
  82.        int status;  /* 0-start aplmain,1-start transaction,2-dos shell */
  83.        char p[80];  /* string for system(p) */
  84.        char args[64];/* string of arguments */
  85.        int rc;      /* aplmain return code */
  86.        char dir[60];/* directory name for aplmain */
  87.        int drlen;   /* directory name length */
  88.        void *tpe;   /* entry of exit program */
  89.        char pgm_state;
  90. }*p_aparm;
  91.  
  92. extern struct menu_frame {
  93.     int startx, endx, starty, endy;
  94.     unsigned char *p;
  95.     char **menu;
  96.     char *keys;
  97.     int border;
  98.     unsigned long count;
  99.     unsigned char attrib;
  100.     int active;
  101.     int curx, cury;
  102.     char *header;
  103.     } frame[MAX_FRAME];
  104.  
  105. extern char p_dcl[21];
  106. extern unsigned char dr_ind[80];
  107. extern char c_pt[60];
  108. extern int drive_ind[10];
  109. extern char lu_name[9];
  110. extern char lu_id[8];
  111. extern char tp_id[8];
  112. extern unsigned  long conv_id;
  113. extern char mode_name[9];
  114. extern char tp_exist;
  115.  
  116. SendFil(p, n)
  117. char *p;
  118. int n;
  119. {
  120.     long FS; /* File Size */
  121.     int  fd; /* File handle */
  122.     char *buff; /* input buffer */
  123.     unsigned s;
  124.     char fsiz[10];
  125.     char retstr[8];
  126.     unsigned long count;
  127.     int i;
  128.     int ch;
  129.     unsigned char rts;
  130.     unsigned char wr;
  131.     unsigned int max_length ;
  132.  
  133.     char pt[80];
  134.     unsigned  char tpn[64];
  135.     struct rc {
  136.                 unsigned int prim;
  137.                 unsigned long sec;
  138.               } v_rc;
  139.     struct msg {  /*send_data*/
  140.                 int len;
  141.                 char str[BLKSIZ];
  142.                } *p_gds;
  143.     unsigned long rc;
  144.     char p_lu[9];
  145.     char p_mode[9];
  146.     int length;
  147.  
  148.     if(( fd = open(p, O_RDONLY | O_BINARY)) < 0){
  149.         window(20);
  150.         window_xy(20, 6, 1);
  151.         strcpy(pt, "Error file open. Press ESC to continue.");
  152.         window_puts(20, pt);
  153.         goto SendExit;
  154.     }
  155.     FS = filelength( fd );
  156.     sprintf(fsiz, "%lu", FS);
  157.  
  158.     if ((p_gds = malloc(sizeof(struct msg))) == NULL) {
  159.         return 1;
  160.     }
  161.     buff = (char *)p_gds + 2;
  162.     window(20);
  163.     window_xy(20, 1, 1);
  164.     strcpy(pt, "Partner LU..................");
  165.     strcat(pt, pstr[cur_ln].plu);
  166.     window_puts(20, pt);
  167.     window_xy(20, 2, 1);
  168.     strcpy(pt, "File name...................");
  169.     strcat(pt, p);
  170.     window_puts(20, pt);
  171.     window_xy(20, 3, 1);
  172.     strcpy(pt, "File size...................");
  173.     strcat(pt, fsiz);
  174.     window_puts(20, pt);
  175.     window_xy(20, 4, 1);
  176.     strcpy(pt, "Sent count..................0");
  177.     window_puts(20, pt);
  178.  
  179.    if ( n != 0 ){
  180.     if (!tp_exist) {
  181.         tp_started
  182.                  (lu_id,
  183.                   tp_id,
  184.                   &rc);
  185.         if (rc != 0) {
  186.             window_xy(20, 6, 1);
  187.             window_puts(20, "TP_started failure. Press ESC to exit.");
  188.             goto SendExit;
  189.     }
  190.     tp_exist = 1; /* TP_started O.K! */
  191.     }
  192.  
  193.      strcpy (tpn,"SEND "); /* name of work */
  194.     strcat (tpn, p);      /* file name    */
  195.     /*conv_id - return param -id work link */
  196.     strcpy(p_lu, pstr[cur_ln].plu);
  197.     strcpy(p_mode, pstr[cur_ln].mode_name);
  198.     allocate  (p_lu,
  199.                p_mode,
  200.                tpn,
  201.                WHEN_SESSION_ALLOCATED,
  202.                NONE,
  203.                NONE,
  204.                NULL,
  205.                NULL,
  206.                tp_id,
  207.                &conv_id,
  208.                NULL,
  209.                &v_rc) ;
  210.  
  211.     if (v_rc.prim != 0) {
  212.         window_xy(20, 6, 1);
  213.         window_puts(20, "Allocation failure. Press ESC to exit.");
  214.         goto SendExit;
  215.     }
  216.   }
  217.   else
  218.        {
  219.        max_length = 255;
  220.        recwait (tp_id,
  221.                 conv_id,
  222.                 ll,
  223.                 &v_rc,
  224.                 &length,
  225.                 max_length,
  226.                 &rts,
  227.                 p_gds,
  228.                 &wr);
  229.        }
  230.  
  231.     count = 0;
  232.     while ((s = read(fd,buff, BLKSIZ)) > 0 ) {
  233.     /*  Send this line */
  234.        count += s;
  235.        p_gds->len =s + 2;
  236.        length=p_gds->len;
  237.        send_data(tp_id,
  238.                  conv_id,
  239.                  p_gds,
  240.                  0,
  241.                  0,
  242.                  length,
  243.                  &v_rc,
  244.          &rts);
  245.        max_length = 255;
  246.        if (v_rc.prim == 0) {
  247.       recwait (tp_id,
  248.                 conv_id,
  249.                 ll,
  250.                 &v_rc,
  251.                 &length,
  252.                 max_length,
  253.                 &rts,
  254.                 p_gds,
  255.                 &wr);
  256.        }
  257.        else    {
  258.            window(14);
  259.            window_xy(14, 1, 4);
  260.            window_puts(14, "Return code from send");
  261.            sprintf(retstr,"%x", v_rc.prim);
  262.            i = (30 - strlen(retstr))/2;
  263.            window_xy(14, 2, i);
  264.            window_puts(14, retstr);
  265.            while ((ch = getch()) != ESC) ;
  266.            deactivate(14);
  267.            goto EndOfSend;
  268.        }
  269.  
  270.        /* Map bytes count */
  271.        window_xy(20, 4, 29);
  272.        sprintf(fsiz, "%lu", count);
  273.        window_puts(20, fsiz);
  274.     }
  275. EndOfSend:
  276.     deallocate (tp_id,
  277.                 conv_id,
  278.                 Flush,
  279.                 &v_rc);
  280.     if (v_rc.prim != 0) {
  281.         window(14);
  282.         window_xy(14, 1, 4);
  283.         window_puts(14, "Ret. code from DEALLOCATE");
  284.         sprintf(retstr,"%x", v_rc.prim);
  285.         i = (30 - strlen(retstr))/2;
  286.         window_xy(14, 2, i);
  287.         window_puts(14, retstr);
  288.         while ((ch = getch()) != ESC) ;
  289.         deactivate(14);
  290.     }
  291.     window_xy(20, 6, 1);
  292.     strcpy(pt, "Ready!  Press ESC to continue.");
  293.     window_puts(20, pt);
  294.  
  295. SendExit:
  296.     if (p_aparm -> pgm_state != 1) { /* Local control */
  297.         while ((ch = getch()) != ESC) ;
  298.     }
  299.     else {
  300.            tp_ended (tp_id, &rc);
  301.            tp_exist = 0;
  302.          }
  303.     deactivate(20);
  304.     close( fd );
  305.     free( p_gds );
  306.  
  307.     return (0);
  308. }
  309.